package com.haois.component.util;


/**
 * Created by RuiHaoZ on 2017/12/12.
 * Using IntelliJ IDEA
 * 收费公路联网收费数据编码关键数据正则表达式（v1.0）
 */
public class VRegularUtil {

	public static void main(String[] args) {
		String temp = "";
		if (!VRegularUtil.isName1(temp)){
			System.out.println("error1");
		}else{
			System.out.println("true");
		}
	}

	/**
	 * 所有个人用户，联系人之类
	 * @param param
	 * @return
	 * 中文字符，空格符（英文名时允许空格），大小写英文字母，英文句号，英文名字中的点“• ”
	 */
	public static boolean isName1(String param){
		String name1Reg ="(^[A-Za-z\\s·•.]+$)|(^[\u2E80-\uFE4F·•.]+$)";
		if(param.matches(name1Reg)){
			return true;
		}
		return false;
	}

	/**
	 * 所有单位名称类的字段，如发行方、公路方
	 * @param param
	 * @return
	 * 中文字符，连字符（英文连字符，中文连字符），数字，大小写英文字母，英文句号，英文名字中的点“••”，中英文括号，反斜杠“\”，斜杠“/”，“&”，书名号“《》”
	 */
	public static boolean isName2(String param){
		String name2Reg ="^[\u2E80-\uFE4F\\w()（）.\\-·•—/\\&《》]+$";
		if(param.matches(name2Reg)){
			return true;
		}
		return false;
	}
	/**
	 * 所有地址相关
	 * @param param
	 * @return
	 * 中文字符，数字，大小写英文字母，连字符（中英文连字符），中英文句号，“+”号，中英文括号，英文名字中的点“••”，中文顿号，中英文逗号，“&”，“#”，中英文双引号，中英文冒号，“[]”，“【】”，反斜杠“\”，正斜杠“/”，书名号“《》”，*，~
	 */
	public static boolean isAddress(String param){
		String addressReg ="^[\u2E80-\uFE4F\\w.+()（）\\-\\—/&:：#&*《》、，,.。~·•“”\"\"【】\\[\\]]+$";
		if(param.matches(addressReg)){
			return true;
		}
		return false;
	}

	/**
	 * 特殊字符过滤 vehicleType，vehicleModel，用户卡model，OBU信息model
	 * @param param
	 * @return
	 * 中文字符，大小写英文字母，数字，英文句号，加号“+”，中英文括号，连字符（中英文），英文名字中的点“••”，斜杠/，反斜杠\
	 */
	public static boolean isFilter(String param){
		String filterReg ="^[\u2E80-\uFE4F()（）\\w.+\\-·•\\—/]*$";
		if(param.matches(filterReg)){
			return true;
		}
		return false;
	}
	/**
	 * 车辆识别代号
	 * @param param
	 * @return
	 * 大小写字母，数字，连字符，反斜杠/
	 */
	public static boolean isVin(String param){
		String vinReg ="^[\\w\\-/\\+]+$";
		if(param.matches(vinReg)){
			return true;
		}
		return false;
	}
	/**
	 * 车辆发动机号
	 * @param param
	 * @return
	 * 中文汉字，大小写字母，数字，连字符（中英文），斜杠/，*，空格
	 */
	public static boolean isEngineNum(String param){
		String engineNumReg ="^[\\w\\-/\\+\\*\\s\u2E80-\uFE4F—]+$";
		if(param.matches(engineNumReg)){
			return true;
		}
		return false;
	}
	/**
	 * 护照、港澳居民来往内地通行证、台湾居民来往大陆通行证、统一社会信用代码证书、组织机构代码证、营业执照、律师事务所执业许可证
	 * @param param
	 * @return
	 * 102-104，201-203、206：大小写字母、数字、（中英文）连字符、反斜杠、（）、()
	 */
	public static boolean isCode1(String param){
		String code1Reg ="^[\\w()\\-（）—/]+$";
		if(param.matches(code1Reg)){
			return true;
		}
		return false;
	}
	/**
	 * 身份证
	 * @param param
	 * @return
	 * 101：以省编码开头，中间15位数字，最后一位为数字或字符X(大写)关联规则
	 */
	public static boolean isUid(String param){
		String uidReg="^(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65)\\d{15}(\\d{1}|X)$";
		if(param.matches(uidReg)){
			return true;
		}
		return false;
	}
	/**
	 * 武警、军官证、事业单位法人证书、社会团体法人登记证书
	 * @param param
	 * @return
	 * 105、106、204、205：中文字符，大小写字母、数字、（中英文）连字符
	 */
	public static boolean isCode2(String param){
		String code2Reg ="^[\u2E80-\uFE4F\\w\\-—]+$";
		if(param.matches(code2Reg)){
			return true;
		}
		return false;
	}
	/**
	 * 199、299 其他
	 * @param param
	 * @return
	 * 仅做特殊字符过滤
	 */
	public static boolean isCode3(String param){
		String code3Reg ="^[\u2E80-\uFE4F()（）\\w.+\\-·•\\—/]*$";
		if(param.matches(code3Reg)){
			return true;
		}
		return false;
	}
	/**
	 * 车牌
	 * @param param
	 * @return
	 * 正常车牌号长度为6、7或8，满足省份简称范围，发证机关代码必须为字母，顺序码长度可以为5位或6位，顺序码字母数最多为3个（不含发证机关代号）。部分样例：
	 */
	public static boolean isCarCard(String param){
		String carCardReg ="^([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z0-9]{1}[A-Z0-9]{1}([京津沪渝桂蒙宁新藏冀晋辽吉黑苏浙皖赣闽鲁粤鄂湘豫川云贵陕甘青琼])?[A-HJ-Z0-9]{1}[A-NP-Z0-9]{3}[A-NP-Z0-9挂学警港澳领试超外]{1}([A-HJ-NP-Z0-9外])?)|([A-Z0-9]{7})$";
		if(param.matches(carCardReg)){
			return true;
		}
		return false;
	}
	/**
	 * 手机
	 * @param param
	 * @return
	 * 手机号必须满足11位数字，且前2位运营商必须满足已有号码段范围（验证13、14、15、17、18、19为合法）
	 */
	public static boolean isMobile(String param){
		String mobileReg ="^1[3|4|5|7|8|9][0-9]{9}$";
		if(param.matches(mobileReg)){
			return true;
		}
		return false;
	}
	/**
	 *座机+手机
	 * @param param
	 * @return
	 * 不允许短号，区号为3位或4位，座机号码为6、7或8位，格式必须满足XXXX-XXXXXXX、XXXX-XXXXXX或XXX-XXXXXXXX的形式（分隔符为英文连字符“-”），兼容分机号（以英文连字符“-”分隔号码与分机号的情况）。也可以填写手机号
	 */
	public static boolean isTel(String param){
		String telReg ="^0[1-9][0-9]{1,2}-[1-9][0-9]{5,7}(-[0-9]{1,4})?|1[3|4|5|7|8|9][0-9]{9}$";
		if(param.matches(telReg)){
			return true;
		}
		return false;
	}
	/**
	 * 营业时间
	 * @param param
	 * @return
	 * 允许：每年节假周月天一二三四五六日至,.或星期:0-9\\-\\s,AMamPMpm
	 */
	public static boolean isBusinessHours(String param){
		String businessHoursReg ="^[每月年节假周天第休息一二三四五六日至，.或星期:0-9\\-\\s,AMamPMpm]*$";
		if(param.matches(businessHoursReg)){
			return true;
		}
		return false;
	}


}


